package kin.system.security; 
import java.io.IOException; 
import javax.servlet.Filter; 
import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse; 
import org.springframework.beans.factory.annotation.Autowired; 

import org.springframework.security.access.SecurityMetadataSource; 
import org.springframework.security.access.intercept.AbstractSecurityInterceptor; 
import org.springframework.security.access.intercept.InterceptorStatusToken; 
import org.springframework.security.web.FilterInvocation; 
import org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource; 
public class MyFilterSecurityInterceptor extends AbstractSecurityInterceptor
implements Filter {

private FilterInvocationSecurityMetadataSource securityMetadataSource;

public void doFilter(ServletRequest request, ServletResponse response,
	FilterChain chain) throws IOException, ServletException {
FilterInvocation fi = new FilterInvocation(request, response, chain);
//invoke(fi);



         InterceptorStatusToken interceptorStatusToken = super.beforeInvocation(fi);
         //interceptorStatusToken.getSecurityContext()
         fi.getChain().doFilter(fi.getRequest(), fi.getResponse());
         super.afterInvocation(interceptorStatusToken, null);
}

public FilterInvocationSecurityMetadataSource getSecurityMetadataSource() {
return this.securityMetadataSource;
}

public Class<? extends Object> getSecureObjectClass() {
return FilterInvocation.class;
}

/*public void invoke(FilterInvocation fi) throws IOException,
	ServletException {
InterceptorStatusToken token = super.beforeInvocation(fi);
//InterceptorStatusToken token = super.beforeInvocation(fi);
try {
	
	fi.getChain().doFilter(fi.getRequest(), fi.getResponse());
} finally {
	super.afterInvocation(token, null);
}
}*/


public SecurityMetadataSource obtainSecurityMetadataSource() {
return this.securityMetadataSource;
}

@Autowired
public void setSecurityMetadataSource(FilterInvocationSecurityMetadataSource securityMetadataSource) {
System.out.println("abc=======================edf");
this.securityMetadataSource = securityMetadataSource;
}

@Override
public void destroy() {
	// TODO Auto-generated method stub
	
}

@Override
public void init(FilterConfig arg0) throws ServletException {
	
	
}




}
